🚀 PJ_API 管理系統
統一的 Ollama 模型 API 接口服務
服務狀態監控
正在檢查服務狀態...
請稍候
-
在線服務
-
離線服務
-
可用模型
上次更新:-
自動刷新 (30秒)
載入中...
正在獲取服務狀態
使用統計
0
總請求數
0%
成功率
0ms
平均回應時間
0
總 Token 數
Token 使用明細
Prompt Tokens:
0
Completion Tokens:
0
錯誤次數:
0
模型使用分布
每日請求趨勢
API 測試工具
🚀 模型快速測試
對每個模型發送簡單問題,快速確認服務是否正常運作
載入模型列表中...
1. 列出可用模型
2. 聊天完成測試
🎤 語音轉文字服務
將語音檔案轉換為文字,支援多種音訊格式
支援格式
WAV, MP3, M4A, OGG, FLAC, WebM
多語言支援
中文、英文、日文等多種語言
高效轉錄
基於 Whisper 模型的高精度轉錄
檔案限制
最大支援 50MB 的音訊檔案
🎙️ 即時麥克風錄音
點擊麥克風開始錄音,再次點擊停止並自動轉錄翻譯
點擊開始錄音
📁 上傳音訊檔案
📁
點擊或拖放音訊檔案到這裡
支援 WAV, MP3, M4A, OGG, FLAC 等格式
API 使用方式
端點資訊
| 功能 | 方法 | 端點 |
|---|---|---|
| 語音轉文字 (檔案) | POST |
/v1/audio/transcriptions |
| 語音轉文字 (Base64) | POST |
/v1/audio/transcriptions/base64 |
| 🌐 文字翻譯 | POST |
/v1/audio/translate |
| 🌐 語音轉錄+翻譯 | POST |
/v1/audio/transcribe-and-translate |
使用範例 - cURL
# 上傳音訊檔案進行轉錄 curl -X POST "https://ollama_pjapi.theaken.com/v1/audio/transcriptions" \ -F "file=@your_audio.wav"
使用範例 - Python
import requests
url = "https://ollama_pjapi.theaken.com/v1/audio/transcriptions"
with open("audio.wav", "rb") as f:
files = {"file": f}
response = requests.post(url, files=files)
result = response.json()
print("轉錄結果:", result["text"])
使用範例 - JavaScript
const formData = new FormData();
formData.append('file', audioFile);
const response = await fetch(
'https://ollama_pjapi.theaken.com/v1/audio/transcriptions',
{ method: 'POST', body: formData }
);
const result = await response.json();
console.log('轉錄結果:', result.text);
回應格式
{
"success": true,
"text": "轉錄出的文字內容",
"details": [...],
"error": null
}
對話歷史紀錄
🔐
需要密碼驗證
請輸入管理員密碼以查看歷史對話紀錄
📝 OCR 文件辨識服務
上傳圖片文件,使用 AI 技術自動辨識文字內容,支援多種語言與輸出格式。
文件上傳
拖放圖片或 PDF 到此處
或點擊選擇檔案
JPG
PNG
GIF
WebP
BMP
PDF
最大 20MB
辨識設定
辨識方式
選擇 OCR 模型
選擇適合您需求的 OCR 模型
文件語言
輸出格式
📋
辨識結果
上傳文件並點擊「開始辨識」查看結果
API Key 管理
管理系統的 API Key,可以建立、停用或刪除使用者的存取權限。
建立新 API Key
API Key 列表
載入中...
API 使用文檔
📝 OCR API 文檔
文字辨識 API,支援多種 OCR 引擎,包含 DeepSeek OCR(GPU 加速)、PP-OCR 及 LLaVA 視覺模型。
可用 OCR 模型
| 模型 ID | 名稱 | 特點 | 最適用場景 |
|---|---|---|---|
deepseek-ocr |
🔮 DeepSeek OCR | GPU 加速、高精度、智能版面分析 | 複雜文件、手寫辨識、多語言混排 |
pp-ocrv5 |
📄 PP-OCRv5 | 超高精度、80+ 語言、表格辨識 | 高精度需求、多語言文件、表格 |
llava-ocr |
👁️ LLaVA 7B OCR | AI 智能辨識、理解上下文 | 一般文件、手寫辨識、複雜版面 |
general-ocr |
📋 通用 OCR | 高精度、快速處理 | 印刷文件、清晰圖片 |
table-ocr |
📊 表格 OCR | 表格結構保留、欄位對齊 | 表格、報表、財務文件 |
invoice-ocr |
🧾 發票 OCR | 發票格式、金額辨識 | 發票、收據、帳單 |
POST /v1/ocr/recognize 參數
| 參數 | 類型 | 必填 | 說明 |
|---|---|---|---|
file |
File | ✅ | 上傳的圖片或 PDF 檔案(支援 JPG、PNG、GIF、WebP、BMP、PDF) |
model |
string | ❌ | OCR 模型,預設 llava-ocr,推薦 deepseek-ocr |
output_format |
string | ❌ | 輸出格式:text、json、markdown、all |
language |
string | ❌ | 辨識語言:auto(自動)、zh、en、ja、ko |
💡 DeepSeek OCR PDF 智能處理:
上傳 PDF 時,系統會自動偵測是否包含可提取文字。若有內嵌文字則直接提取(更快更準確),若為掃描檔則自動轉圖片進行 OCR。
Python 基礎設定
import requests
API_URL = "https://ollama_pjapi.theaken.com"
API_KEY = "YOUR_API_KEY"
headers = {"Authorization": f"Bearer {API_KEY}"}
def ocr_recognize(file_path, model, language="auto", output_format="text"):
"""通用 OCR 辨識函數"""
with open(file_path, "rb") as f:
response = requests.post(
f"{API_URL}/v1/ocr/recognize",
headers=headers,
files={"file": f},
data={
"model": model,
"language": language,
"output_format": output_format
}
)
return response.json()
🔮 DeepSeek OCR(GPU 加速高精度)
# DeepSeek OCR - 複雜文件、手寫辨識、多語言混排
result = ocr_recognize(
file_path="document.png",
model="deepseek-ocr",
language="auto" # 支援: auto, zh, en, ja, ko
)
print("辨識結果:", result["text"])
print("信心度:", result["confidence"])
# DeepSeek OCR 辨識 PDF(自動偵測內嵌文字或轉圖片 OCR)
result = ocr_recognize(
file_path="document.pdf",
model="deepseek-ocr",
language="zh"
)
print(result["text"])
📄 PP-OCRv5(超高精度多語言)
# PP-OCRv5 - 高精度需求、80+ 語言支援、表格辨識
result = ocr_recognize(
file_path="multilang_doc.png",
model="pp-ocrv5",
language="auto",
output_format="markdown" # 支援: text, json, markdown, all
)
print("辨識結果:", result["text"])
# PP-OCR 辨識多頁 PDF
result = ocr_recognize(
file_path="report.pdf",
model="pp-ocrv5",
output_format="all"
)
print(result["text"])
👁️ LLaVA 7B OCR(AI 智能辨識)
# LLaVA OCR - AI 智能辨識、理解上下文、複雜版面
result = ocr_recognize(
file_path="handwritten_note.jpg",
model="llava-ocr",
language="auto"
)
print("辨識結果:", result["text"])
# LLaVA 適合處理手寫筆記、複雜排版
result = ocr_recognize(
file_path="complex_layout.png",
model="llava-ocr"
)
print(result["text"])
📋 通用 OCR(快速處理)
# 通用 OCR - 印刷文件、清晰圖片、快速處理
result = ocr_recognize(
file_path="printed_doc.png",
model="general-ocr",
language="zh"
)
print("辨識結果:", result["text"])
# 批量處理多個文件
import os
for filename in os.listdir("documents/"):
if filename.endswith((".png", ".jpg")):
result = ocr_recognize(f"documents/{filename}", model="general-ocr")
print(f"{filename}: {result['text'][:100]}...")
📊 表格 OCR(結構保留)
# 表格 OCR - 表格結構保留、欄位對齊、Excel 匯出
result = ocr_recognize(
file_path="spreadsheet.png",
model="table-ocr",
output_format="json" # 推薦使用 json 格式取得結構化資料
)
print("辨識結果:", result["text"])
# 處理財務報表
result = ocr_recognize(
file_path="financial_report.pdf",
model="table-ocr",
output_format="markdown"
)
print(result["text"])
🧾 發票 OCR(財務專用)
# 發票 OCR - 發票格式、金額辨識、稅號提取
result = ocr_recognize(
file_path="invoice.jpg",
model="invoice-ocr",
output_format="json" # 推薦 json 格式取得結構化發票資訊
)
print("辨識結果:", result["text"])
# 處理收據
result = ocr_recognize(
file_path="receipt.png",
model="invoice-ocr"
)
print(result["text"])
查詢 OCR 模型與健康狀態
# 查詢所有可用 OCR 模型
response = requests.get(f"{API_URL}/v1/ocr/models", headers=headers)
models = response.json()["models"]
for model in models:
status = "✅" if model["available"] else "❌"
print(f"{status} {model['id']}: {model['name']} - {model['best_for']}")
# 檢查 OCR 服務健康狀態
response = requests.get(f"{API_URL}/v1/ocr/health", headers=headers)
health = response.json()
print(f"服務狀態: {health['status']}")
for service, status in health["services"].items():
print(f" {service}: {status}")
OCR 回應格式
{
"success": true,
"text": "辨識出的文字內容...",
"confidence": 0.95,
"model": "deepseek-ocr",
"processing_time": 1.234,
"details": {
"pages": 1,
"method": "direct_extraction" // 或 "ocr"
}
}
💬 Chat Completions API 文檔
對話生成 API,支援多種地端與雲端模型,相容 OpenAI API 格式。
可用模型分類
| 類型 | 提供者 | 模型範例 | 特點 |
|---|---|---|---|
| 地端 | llama.cpp | gpt-oss:120b |
本地運行、無網路需求、資料隱私 |
| 地端 | Ollama | qwen2.5:72b, llava:7b |
本地視覺模型、快速回應 |
| 雲端 | DeepSeek | deepseek-chat, deepseek-reasoner |
高效能、推理專精 |
| 雲端 | SiliconFlow | deepseek-ai/DeepSeek-V3, Qwen/Qwen3-235B-A22B |
50+ 模型、多廠商整合 |
SiliconFlow 熱門模型
| 模型 ID | 名稱 | 特點 | 最適用場景 |
|---|---|---|---|
deepseek-ai/DeepSeek-R1 |
DeepSeek R1 | 深度推理、思維鏈 | 數學證明、邏輯分析 |
deepseek-ai/DeepSeek-V3 |
DeepSeek V3 | 通用對話、128K 上下文 | 日常對話、長文本 |
Qwen/Qwen3-235B-A22B |
Qwen 3 235B | 2350 億參數、頂尖性能 | 複雜任務、專業諮詢 |
Qwen/Qwen2.5-72B-Instruct |
Qwen 2.5 72B | 中文頂尖、指令跟隨 | 中文寫作、知識問答 |
Qwen/Qwen2.5-Coder-32B-Instruct |
Qwen Coder 32B | 程式碼專精 | 程式開發、代碼審查 |
zai-org/GLM-4.7 |
GLM-4.7 | 智譜最新版 | 中文對話、內容創作 |
moonshotai/Kimi-K2-Thinking |
Kimi K2 Thinking | 深度思考、推理增強 | 複雜推理、數學問題 |
Python 基礎設定
import requests
API_URL = "https://ollama_pjapi.theaken.com"
API_KEY = "YOUR_API_KEY"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
def chat(model, messages, stream=False):
"""通用對話函數"""
response = requests.post(
f"{API_URL}/v1/chat/completions",
headers=headers,
json={
"model": model,
"messages": messages,
"stream": stream
}
)
return response.json()
🏠 地端模型使用範例
# 使用地端 GPT-OSS 120B 模型
result = chat(
model="gpt-oss:120b",
messages=[
{"role": "system", "content": "你是一個專業的助手"},
{"role": "user", "content": "請解釋什麼是機器學習"}
]
)
print(result["choices"][0]["message"]["content"])
# 使用地端 Qwen 2.5 72B 模型
result = chat(
model="qwen2.5:72b",
messages=[{"role": "user", "content": "用中文寫一首詩"}]
)
print(result["choices"][0]["message"]["content"])
☁️ SiliconFlow 雲端模型使用範例
# 使用 DeepSeek V3(通用對話)
result = chat(
model="deepseek-ai/DeepSeek-V3",
messages=[{"role": "user", "content": "今天天氣如何?"}]
)
print(result["choices"][0]["message"]["content"])
# 使用 DeepSeek R1(深度推理)
result = chat(
model="deepseek-ai/DeepSeek-R1",
messages=[{"role": "user", "content": "證明根號2是無理數"}]
)
print(result["choices"][0]["message"]["content"])
# 使用 Qwen 3 235B(頂尖性能)
result = chat(
model="Qwen/Qwen3-235B-A22B",
messages=[{"role": "user", "content": "分析人工智能的未來發展趨勢"}]
)
print(result["choices"][0]["message"]["content"])
# 使用 Qwen Coder(程式開發)
result = chat(
model="Qwen/Qwen2.5-Coder-32B-Instruct",
messages=[{"role": "user", "content": "寫一個 Python 快速排序演算法"}]
)
print(result["choices"][0]["message"]["content"])
🔄 串流回應範例
import requests
import json
def chat_stream(model, messages):
"""串流對話函數"""
response = requests.post(
f"{API_URL}/v1/chat/completions",
headers=headers,
json={
"model": model,
"messages": messages,
"stream": True
},
stream=True
)
for line in response.iter_lines():
if line:
line = line.decode('utf-8')
if line.startswith('data: ') and line != 'data: [DONE]':
data = json.loads(line[6:])
if 'choices' in data and data['choices']:
delta = data['choices'][0].get('delta', {})
if 'content' in delta:
print(delta['content'], end='', flush=True)
# 使用串流回應
chat_stream(
model="deepseek-ai/DeepSeek-V3",
messages=[{"role": "user", "content": "寫一篇關於AI的文章"}]
)
📋 查詢可用模型
# 查詢所有可用模型
response = requests.get(f"{API_URL}/v1/models", headers=headers)
models = response.json()["data"]
# 按部署類型分類顯示
local_models = [m for m in models if m.get("deployment_type") == "local"]
cloud_models = [m for m in models if m.get("deployment_type") == "cloud"]
print("=== 地端模型 ===")
for m in local_models:
print(f" {m['id']} ({m.get('provider', 'unknown')})")
print("\n=== 雲端模型 ===")
for m in cloud_models:
provider = m.get('provider', 'unknown')
print(f" {m['id']} ({provider})")
Chat Completions 回應格式
{
"id": "chatcmpl-xxx",
"object": "chat.completion",
"created": 1700000000,
"model": "deepseek-ai/DeepSeek-V3",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "回應內容..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 10,
"completion_tokens": 50,
"total_tokens": 60
}
}